#ifndef KALEIDOSCOPE_H
#define KALEIDOSCOPE_H
/**
*@file kaleidoscope.h
*/
#include <QWidget>
#include <QImage>
#include <QPainter>
#include <QPolygon>

/// \class Kaleidoscope
class Kaleidoscope : public QWidget
{
    Q_OBJECT
public:
    /** Konstruktor
      */
    Kaleidoscope();
    /** Zdarzenie odswiezania ekranu
       * @param event, nieuzywany
       */
    void paintEvent(QPaintEvent *event);
     /** Zdarzenie uzywane podczas animacji
       * @param event, nieuzywany
       */
    void timerEvent(QTimerEvent* event );
        /** Metoda pomocnicza rysujaca trojkat z jego odbiciem lustrzanym
       * @param painter kontekst rysowania
       */
    void draw(QPainter&);
     /** Setter, ustawiajacy texture, ktora zostanie poddana 'kalejdoskopowaniu'
       * @param file, nazwa pliku
       */
    void setTexture(const QString& file);
      /** Getter, zwracajacy liczbe osi
       */
    int getAxis();
    /** Getter, zwracajacy liczbe kat, o jaki jest obrocony uklad kalejdoskopu
       */
    int getAngle();
    /** Getter, zwracajacy dlugosc promienia klaejdoskopu
       */
    int getRadius();
    /** setter, wlaczajacy, wylaczajacy animacje
       */
    void setAnimation(bool enable);

 public slots:
    /** Slot, obslugujacy ustawienie liczby osi
       */
    void setAxis(int axis);
    /** Slot, obslugujacy ustawienie liczby kata
       */
    void setAngle(int ang);
    /** Slot, obslugujacy ustawienie liczby promienia
       */
    void setRadius(int radius);
 private:
    /** Metoda pomocnicza, generujaca kat, uzywany przy generowaniu wielokata kalejdoskopu
       */
    QPolygon getTriangle();
    /// Pedzel ktorym malujemy kazdy trojkat kalejdoskopu
    QBrush brush;
    /// zmienna przechowujaca obraz ktory bedzie tekstura naszego
    QPixmap pix;
    /// Wielokat ktory jest tylko odrysowywany w zdarzeniu odswiezania
    QPolygon pol;
    /// Dlugosc boku trojkata skladajacy sie na wielokat
    int r;
    /// Liczba osi
    int nAxis;
    /// Kat o jaki jest obrocony kalejdoskop
    int angle;
    /// Deskryptor zegara sluzacego do animacji
    int animationTimer;
};

#endif // KALEIDOSCOPE_H
